﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using F10101CM.Control;
using F1010DB.CustomEntity.Account;
using F1010DB.SecurityServices;
using F1010DB.CustomEntity.InitDanhMuc;
using F1010DB.Constant;
using F1010DB.CustomEntity.Master;
using F1010DB.CustomEntity.ScoutMemberCustom;
using F1010DB.ScoutMember;
using F1010DB.Enums;
using F1010DB.SearchCommon;
using F10101CM.Common;
using F1010DB;

namespace HDVN_F1_101.HDS
{
    public partial class frmEditScoutMaster : Form
    {
        private PopulateToComboBox populateInitDateComboBox = null;
        private CommonMasterServices commmonMasterService = null;
        private MasterCustomCommon customCommon = null;
        private RuleBoolean ruleCondition = null;
        private bool isEditable;
        private const string AGE_SECURITY_CARD = "XR000";
        private SearchUnitData list = null;
        private ScoutMemberServices services = null;
        private ScoutMemberInput input = null;
        private F1010DB.Common.GenerateCodeAutomatic.GenerateForScoutMember scoutService = null;
        public frmEditScoutMaster(bool isEditable)
        {
            InitializeComponent();
            this.isEditable = isEditable;
        }

        private void frmEditScoutMaster_Load(object sender, EventArgs e)
        {
            populateInitDateComboBox = new PopulateToComboBox();
            list = new SearchUnitData();
            if (AccountInfo.level == "1" || AccountInfo.level == "2" )
            {
                groupBox2.Enabled = false;
            }
            else
            {
                groupBox2.Enabled = true;
            }
            
            // Đỗ dữ liệu năm 
            populateInitDateComboBox.populateBirthYearToCombobox(cbxNam, new int[] { AccountInfo.minAge, AccountInfo.maxAge });
            populateInitDateComboBox.populateMonthOfComboBox(cbxThang);
            populateInitDateComboBox.populateDataToComboBoxCombineValueAndCaption(InitDisplayLoad.listDanhMuc[TableNameList.TABLE_DANH_MUC_TINH_THANH], "MA_TINH_THANH", "TEN_TINH_THANH",cbxNoiSinh);
            populateInitDateComboBox.populateDataToCombobox(InitDisplayLoad.listDanhMuc["A002"], "KEY_1", "VALUE", cbxDanToc);
            populateInitDateComboBox.populateDataToCombobox(InitDisplayLoad.listDanhMuc["A001"], "KEY_1", "VALUE", cbxTonGiao);
            populateInitDateComboBox.populateDataToCombobox(InitDisplayLoad.listDanhMuc["A003"], "KEY_1", "VALUE", cbxNgheNghiep);
            populateInitDateComboBox.populateDataToCombobox(InitDisplayLoad.listDanhMuc["A005"], "KEY_1", "VALUE", cbxTrinhDo);
            populateInitDateComboBox.populateDataToComboBoxCombineValueAndCaption(InitDisplayLoad.listDanhMuc[TableNameList.TABLE_DANH_MUC_TINH_THANH], "MA_TINH_THANH", "TEN_TINH_THANH", cbxNoiCap);
            populateInitDateComboBox.populateDataToComboBoxCombineValueAndCaption(InitDisplayLoad.listDanhMuc[TableNameList.TABLE_DANH_MUC_TINH_THANH], "MA_TINH_THANH", "TEN_TINH_THANH", cbxDiaPhuong);
            populateInitDateComboBox.populateDataToComboBoxCombineValueAndCaption(InitDisplayLoad.listDanhMuc[TableNameList.TABLE_DANH_MUC_TINH_THANH], "MA_TINH_THANH", "TEN_TINH_THANH", cbxTinhThanhDV);

            //Dữ liệu ban đầu
            cbxNoiSinh.SelectedIndex = 0;
            cbxDanToc.SelectedIndex = 0;
            cbxTonGiao.SelectedIndex = 0;
            cbxTrinhDo.SelectedIndex = 0;
            cbxNgheNghiep.SelectedIndex = 0;

            // Ẩn dấu những phần tuyên hứa
            cbxTinhThanhDV.Visible = false;
            cbxLienDoan.Visible = false;
            cbxDonViTH.Visible = false;

            // Phát sinh mã tự động
            scoutService = new F1010DB.Common.GenerateCodeAutomatic.GenerateForScoutMember();
            scoutService.currentYear = DateTime.Now.Year;
            scoutService.unitCode = AccountInfo.accountId;
            scoutService.provinceCode = Int16.Parse(AccountInfo.accountId.Substring(0, 4));
            //txtMaDoanSinh.Text = scoutService.generateForScoutCode();

            string code = scoutService.generateForScoutID();

            txtN1.Text = code.Substring(0, 4);
            txtN2.Text = code.Substring(5, 4);
            txtN3.Text = code.Substring(9, 4);
            txtN4.Text = code.Substring(code.Length - 4);

            // Ẩn dấu phần tuyên hứa
            lblNgayTuyenHua.Visible = false;
            txtNgayTuyenHua.Visible = false;
            lblTruongNhan.Visible = false;
            txtTruongNhanTuyenHua.Visible = false;

            DataTable dtTem = list.getTeam(AccountInfo.accountId);

            populateInitDateComboBox.populateDataToCombobox(dtTem, "MADOI", "TEN_DOI", cbxDoi);
        }

        /// <summary>
        /// Chọn tháng theo năm
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cbxThang_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Xét giá trị
            if (cbxThang.Text != String.Empty)
            {
                cbxNgay.Enabled = true;
            }
            // Xóa khởi tạo dữ liệu
            if (cbxThang.Items.Count != 0)
            {
                cbxNgay.Items.Clear();
            }

            // Đỗ dữ liệu ngày tháng năm vào
            populateInitDateComboBox.populateDayToComboBox(cbxNgay, Int16.Parse(cbxNam.Text), Int16.Parse(cbxThang.Text));

        }

        private void cbxNam_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbxNam.Text == String.Empty)
            {
                cbxThang.Enabled = false;
                cbxNgay.Enabled = false;
            }
            else
            {
                cbxThang.Enabled = true;

                if (isInputSecurityCard())
                {
                    grbProfile2.Enabled = true;
                }
                else
                {
                    grbProfile2.Enabled = false;
                }
                
            }
        }

        /// <summary>
        /// Thực thi việc cho phép nhập hay không về số chứng minh nhân dân
        /// </summary>
        /// <returns></returns>
        private bool isInputSecurityCard()
        {
            commmonMasterService = new CommonMasterServices();
            ruleCondition = new RuleBoolean();
            ruleCondition.key1 = "*";
            ruleCondition.key2 = "*";
            ruleCondition.key3 = "*";
            ruleCondition.key4 = "*";
            ruleCondition.key5 = "*";
            commmonMasterService.commonId = AGE_SECURITY_CARD;
            commmonMasterService.ruleInputCondition = ruleCondition;
            ruleCondition.currentValue = (DateTime.Now.Year - Int16.Parse(cbxNam.Text)).ToString();

            return commmonMasterService.bussinesssForCalc(EnumForMaster.TypeMaster.INTERGER, EnumForMaster.Logic.GREATER_AND_EQUAL, EnumForMaster.Calc.NONE) == 1;


        }
        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        /// <summary>
        /// Xử lý trường hợp over tuổi so với ngành hiện tại
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            var m = MessageBox.Show("Bạn chú ý khi chọn một trường hợp này có nghĩa bạn phải nhập năm sinh bằng tay phải lớn hơn năm tối đa ở ngành, bạn có chắc không ?", "Chú ý", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);

            if (checkBox1.Checked == true)
            {
                if (m == DialogResult.Yes)
                {
                    txtOverYear.Visible = true;
                    cbxNam.Enabled = false;
                }
            }
            else
            {
                txtOverYear.Visible = false;
                cbxNam.Enabled = true;
                checkBox1.Checked = false;
            }

        }

        private void label10_Click(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void label11_Click(object sender, EventArgs e)
        {

        }

        private void chkDaTuyenHua_CheckedChanged(object sender, EventArgs e)
        {
            if (chkDaTuyenHua.Checked)
            {
                // Được phép nhập thông tin
                chkCungDonViTuyenHua.Enabled = true;
                chkCungDonViTuyenHua.Checked = true;
                lblNgayTuyenHua.Visible = true;
                txtNgayTuyenHua.Visible = true;
                lblTruongNhan.Visible = true;
                txtTruongNhanTuyenHua.Visible = true;
            }
            else
            {
                chkCungDonViTuyenHua.Enabled = false;
                chkCungDonViTuyenHua.Checked = false;
                lblDonViTuyenHua.Text = "";
                lblNgayTuyenHua.Visible = false;
                txtNgayTuyenHua.Visible = false;
                lblTruongNhan.Visible = false;
                txtTruongNhanTuyenHua.Visible = false;
                cbxTinhThanhDV.Visible = false;
                cbxLienDoan.Visible = false;
                cbxDonViTH.Visible = false;
            }
        }

        /// <summary>
        /// Xác định hiện tại đơn vị tuyên hứa
        /// Trường hợp đoàn sinh từ đơn vị khác
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void chkCungDonViTuyenHua_CheckedChanged(object sender, EventArgs e)
        {
            if (chkCungDonViTuyenHua.Checked == true)
            {
                chkCungDonViTuyenHua.Checked = true;
                lblDonViTuyenHua.Text = AccountInfo.accountId + "," + AccountInfo.tenDonVi;
                cbxTinhThanhDV.Visible = false;
                cbxLienDoan.Visible = false;
                cbxDonViTH.Visible = false;
            }
            else
            {
                
                cbxTinhThanhDV.Visible = true;
                cbxLienDoan.Visible = true;
                cbxDonViTH.Visible = true;
                lblDonViTuyenHua.Text = "Xin vui lòng chọn đơn vị";
                
               
            }
        }

        private void cbxTinhThanhDV_Click(object sender, EventArgs e)
        {
          
        }

        private void cbxTinhThanhDV_SelectedValueChanged(object sender, EventArgs e)
        {
            
        }

        /// <summary>
        /// Tỉnh thành đơn vị nơi tuyên hứa
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cbxTinhThanhDV_SelectedIndexChanged(object sender, EventArgs e)
        {
            //cbxLienDoan.Items.Clear();
            if (string.IsNullOrEmpty(cbxTinhThanhDV.Text) == false)
            {
                
                string[] p = CovertCommon.splitCodeAndName(cbxTinhThanhDV.Text, '.');               
                DataTable rs = list.listTroopByUnit(p[0]);

                if (rs == null || rs.Rows.Count == 0)
                {
                    cbxLienDoan.Text = "";
                }
                else
                {
                    populateInitDateComboBox.populateDataToCombobox(rs, "MA_DON_VI", "TEN_DON_VI", cbxLienDoan);
                }
                
            }
        }

        /// <summary>
        /// Liên Đoàn
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cbxLienDoan_SelectedValueChanged(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(cbxLienDoan.Text) == false)
            {
                string[] p = CovertCommon.splitCodeAndName(cbxTinhThanhDV.Text, '.');
                var maLienDoan = cbxLienDoan.SelectedValue as string;

                if (maLienDoan == null || string.IsNullOrEmpty(maLienDoan)) { return; }
                list = new SearchUnitData();

                DataTable rs = list.listUnitByTroop(p[0], maLienDoan, true, AccountInfo.level);

                if (rs != null || rs.Rows.Count > 0)
                {
                    populateInitDateComboBox.populateDataToCombobox(rs, "MA_DON_VI", "TEN_DON_VI", cbxDonViTH);
                }
            }
        }

        private void cbxLienDoan_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void cbxDonViTH_SelectedValueChanged(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(cbxDonViTH.Text) == false)
            {
                var code = cbxDonViTH.SelectedValue;

                lblDonViTuyenHua.Text = code + "," + cbxDonViTH.Text;
                lblDonViTuyenHua.ForeColor = Color.Blue;
            }
        }


        private void insertOrUpdateData()
        {
            ResultAction result = null;

            services = new ScoutMemberServices();
        
            addValueToInputForAddOrEdit();
            services.input = input;
            result = services.insertDatabaseNewScoutMember();

            if (result.isSucceed == false)
            {
                StringBuilder sb = new StringBuilder();
                foreach (string s in result.sMsg)
                {
                    sb.AppendLine(s);
                }

                MessageBox.Show("Lỗi nhập dữ liệu : " + sb.ToString(), "Lỗi nhập",MessageBoxButtons.OKCancel,MessageBoxIcon.Error);

            }
            else
            {
                MessageBox.Show(result.sMsg[0] + "\n" + " Mã đoàn sinh (bạn dùng mã này) : " + txtMaDoanSinh.Text + "\n", "Thêm mới thành công", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                btnLuu.Enabled = false;
                scoutService.updateCountScoutMember();
            }
        }
        /// <summary>
        /// Phương thức dùng để chép dữ liệu trước khi thêm hay sửa
        /// </summary>
        private void addValueToInputForAddOrEdit()
        {
            input = new ScoutMemberInput();

            txtMaDoanSinh.Text = scoutService.generateForScoutCode();
            input.InsUser = AccountInfo.accountId;
            input.InsDate = DateTime.Now.Date.ToShortDateString();
            input.MaDonViBanDau = AccountInfo.accountId;
            input.MaDoanSinh = txtMaDoanSinh.Text;
            input.Id = txtN1.Text + txtN2.Text + txtN3.Text + txtN4.Text;
            input.HoLot = txtHoLot.Text;
            input.Ten = txtTen.Text;
            input.TenDem = txtTenDem.Text;
            input.ngaySinh =  cbxNgay.Text;
            input.thangSinh = cbxThang.Text;
            input.namSinh = checkBox1.Checked ==  false ? cbxNam.Text : txtOverYear.Text;
            input.NoiSinh = cbxNoiSinh.Text == String.Empty ? 0 : Int16.Parse(cbxNoiSinh.Text.Split('.')[0]);
            input.SoNha = txtSoNha.Text;
            input.Duong = txtDuong.Text;
            input.Phuong = txtPhuong.Text;
            input.Quan = txtQuan.Text;
            input.Tinh = cbxDiaPhuong.Text == String.Empty ? 0 : Int16.Parse(cbxDiaPhuong.Text.Split('.')[0]);
            input.SoDienThoaiNha = txtSoDienThoaiNha.Text;
            input.SoDienThoaiDd = F10101CM.Common.CovertCommon.converFromEmptyToR(txtSoDienThoaiDD.Text);
            input.Email = F10101CM.Common.CovertCommon.converFromEmptyToR(txtEmail.Text);
            input.Yahoo = F10101CM.Common.CovertCommon.converFromEmptyToR(txtYahoo.Text);
            input.Twitter = F10101CM.Common.CovertCommon.converFromEmptyToR(txtTwitter.Text);
            input.Facebook = F10101CM.Common.CovertCommon.converFromEmptyToR(txtFacebook.Text);
            input.GioiTinh = cbxGioiTinh.Text.Equals("Nam") ? true : false;

            var dantc = cbxDanToc.SelectedValue;
            var tg = cbxTonGiao.SelectedValue;

            input.DanToc = "A001" + "." + dantc.ToString();
            input.TonGiao = "A002" + "." + tg.ToString();
            input.HoVaTenBa = F10101CM.Common.CovertCommon.converFromEmptyToR(txtHoVaTenBa.Text);
            input.emailBa = F10101CM.Common.CovertCommon.converFromEmptyToR(txtEmailba.Text);
            input.SoDtBa = F10101CM.Common.CovertCommon.converFromEmptyToR(txtSoDTBa.Text);
            input.HoVaTenMe = F10101CM.Common.CovertCommon.converFromEmptyToR(txtHoVaTenMe.Text);
            input.SoDtMe = F10101CM.Common.CovertCommon.converFromEmptyToR(txtSoDTMe.Text);
            input.emailMe = F10101CM.Common.CovertCommon.converFromEmptyToR(txtEmailMe.Text);
            input.HoVaTenGiamHo = F10101CM.Common.CovertCommon.converFromEmptyToR(txtNguoiGiamHo.Text);
            input.SoDtGiamHo = F10101CM.Common.CovertCommon.converFromEmptyToR(txtSoDTNGH.Text);
            input.QuanHeGiamHo = comboBox1.Text == string.Empty ? string.Empty : comboBox1.Text;
            input.isTuyenHua = chkDaTuyenHua.Checked == true ? true : false;
            
            // Xác định đoàn sinh này 
            // Tuyên hứa chưa nếu chưa thì để trống
            if (chkDaTuyenHua.Checked == true)
            {
                input.NgayTuyenHua = txtNgayTuyenHua.Text;
                input.DonViTuyenHua = lblDonViTuyenHua.Text.Split(',')[0];
                input.isTuyenHua = true;
                input.TruongNhanTh = txtTruongNhanTuyenHua.Text;
            }
            else
            {
                input.NgayTuyenHua = string.Empty;
                input.DonViTuyenHua = string.Empty;
                input.TruongNhanTh = string.Empty;
                input.isTuyenHua = false;
            }

            
            input.NgayThamGiaPt = F10101CM.Common.CovertCommon.converFromEmptyToR(txtNgayThamGia.Text);

            // Thêm số chứng minh nhân dân
            if (!String.IsNullOrEmpty(txtSoCMND.Text))
            {
                input.Ngaycap = dtNgayCap.Text;
                input.Noicap = Int16.Parse(cbxNoiCap.Text.Split('.')[0]);
                input.Socmnd = txtSoCMND.Text;
            }
            else
            {
                input.Socmnd = string.Empty;
                input.Noicap = 0;
                input.Ngaycap = string.Empty;
            }

            var nghe = cbxNgheNghiep.SelectedValue;
            var trinhdo = cbxTrinhDo.SelectedValue;

            input.NgheNghiep = "A003" + "." + nghe.ToString();
            input.TrinhDoHocVan = trinhdo.ToString();
            input.Lop = F10101CM.Common.CovertCommon.converFromEmptyToR(txtLop.Text);
            input.NoiLamViec = F10101CM.Common.CovertCommon.converFromEmptyToR(txtDonViCQ.Text);

            var doi = cbxDoi.SelectedValue;
            input.teamId = doi.ToString();
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            insertOrUpdateData();
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox2.Checked == true)
            {
                if (cbxNoiSinh.Text != String.Empty)
                {
                    cbxDiaPhuong.Text = cbxNoiSinh.Text;
                    cbxDiaPhuong.Enabled = false;
                }
            }
            else
            {
                cbxDiaPhuong.SelectedIndex = 0;
                cbxDiaPhuong.Enabled = true;
            }
        }

        private void grbProfile2_Enter(object sender, EventArgs e)
        {

        }

        private void cbxNoiSinh_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (checkBox2.Checked == true)
            {
                cbxDiaPhuong.Text = cbxNoiSinh.Text;
            }
            else
            {
                cbxDiaPhuong.SelectedIndex = 0;
            }
        }
    }
}
